const express = require('express')
const app = express()
const cors = require('cors')
const expressjwt = require('express-jwt')
const { errorMessage, secretKey } = require('./utils')
const init = require('./model/init');
// 公共配置文件
const { port } = require('./config')
// Token白名单
const { unlessConfig } = require('./utils/unlessConfig')
// const email = require('./utils/sendEmail'); //引入封装好的函数
// 用户路由
const UserRouter = require('./router/user')
// 图片上传路由
const Image = require('./router/image')
// 商品列表路由
const Goods = require('./router/goods/goods')
const Order = require("./router/order")
const Cart = require("./router/cart")
const Category=require("./router/category")
// cors跨域
app.use(cors())
// json格式数据解析
app.use(express.json())
// urlencoded格式解析
app.use(express.urlencoded({ extended: false }))
// 返回的token解密
app.use(expressjwt({ secret: secretKey, algorithms: ["HS256"] }).unless(unlessConfig))


// 图片静态资源地址
app.use('/avatar', express.static('./public/assets/avatar'))
init().then(() => {
  console.log("表关系加载完成");
}).catch((err) => {
  console.log("表关系加载异常:", err);
})
// 响应信息中间件
app.use((req, res, next) => {
  /**
   * 错误信息返回函数
   * @param {*} error 错误的信息
   * @param {*} success 状态, 默认是false
   */
  res.cc = (error, success = false) => {
    res.json({
      message: error instanceof Error ? error.message : error,
      success
    })
  }
  /**
   * 返回格式约束
   * @param {*} data 数据 
   * @param {*} success 状态
   */
  res.js = (data, success = true) => {
    res.json({
      data: data,
      success: success
    })
  }
  next()
})

// const check = {} //声明一个对象缓存邮箱和验证码，留着
// app.post('/email', function (req, res, next) {
//   time = new Date().getTime()
//   const mail = req.body.email
//   if (!mail) {
//     return res.send('参数错误')
//   } //email出错时或者为空时
//   const code = parseInt(Math.random(0, 1) * 10000) //生成随机验证码
//   check[mail] = code
//   //发送邮件
//   email.sendMail(mail, code, (state) => {
//     if (state) {
//       return res.send("发送成功")
//     } else {
//       return res.send("失败")
//     }
//   })
// })

// 返回前缀
app.use('/front/api', UserRouter)
app.use('/front/api', Image)
app.use('/front/api/goods', Goods)
app.use('/front/api/order', Order)
app.use('/front/api/cart', Cart)//购物车
app.use('/front/api/category',Category)
// 错误中间件
app.use((err, req, res, next) => {
  res.json({ message: errorMessage(err.message), success: false })
})

app.listen(port, () => {
  console.log('http://127.0.0.1:' + port)
})
